#ifndef WINDOW_H
#define WINDOW_H

#include "pch.h"
#include "Event.h"
//#include "RenderContext.h"
namespace HS {

	struct WindowProps
	{
		std::string Title;
		uint32_t Width;
		uint32_t Height;

		WindowProps(const std::string& title = "HS Render Engine",
			uint32_t width = 1280,
			uint32_t height = 720)
			: Title(title), Width(width), Height(height)
		{
			//std::cout << "==========Title : " << title <<"============"<< std::endl;
			LOGINFO("========= {0} =========",title);
			//std::cout << "Width : " << width <<"  "<< "Height : " << height << std::endl;
			LOGINFO("Width:{0}  Height:{1}",width,height);
		}
	};

	class Window
	{
	public:
		using EventCallbackFn = std::function<void(Event&)>;

		virtual ~Window() = default;

		virtual void OnUpdate() = 0;

		virtual uint32_t GetWidth() const = 0;
		virtual uint32_t GetHeight() const = 0;

		
		virtual void SetEventCallback(const EventCallbackFn& callback) = 0;
		virtual void SetVSync(bool enabled) = 0;
		virtual bool IsVSync() const = 0;

		virtual void* GetNativeWindow() const = 0;

		static Window* Create(const WindowProps& props = WindowProps());
	};


	

}

#endif // !WINDOW_H

